package com.by.controller;

import org.springframework.core.SpringVersion;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.servlet.ModelAndView;

import javax.servlet.http.HttpServletRequest;
import java.util.HashMap;
import java.util.Map;

/**
 * @author LittleDesire
 * @description
 * @date 2022-03-25 周五 9:28
 * @since 17
 */
@Controller
public class HelloController {

    // 需要配置视图解析器，/WEB-INF/templates/show.jsp  进行渲染显示
    @GetMapping("a1")
    public ModelAndView a1(ModelAndView mv) {
        mv.setViewName("show");
        mv.addObject("user","李昂");
        mv.addObject("addrs", new String[]{"上海", "南京", "巴黎", "桥东"});
        return mv;
    }

    @GetMapping("a2")
    public ModelAndView a2(Model m) {
        m.addAttribute("user","李昂");
        m.addAttribute("addrs", new String[]{"上海", "南京", "巴黎", "桥东"});
        return new ModelAndView("show");
    }

    //直接访问 /a3 就可以拿到之前添加到视图中的 address 属性值
    @GetMapping("a3")
    public ModelAndView a3() {
        // 不写返回的具体视图，则会显示 放到视图内的信息
        return new ModelAndView();
    }

    // 向视图层添加一个属性address，所有视图都可以调用并显示
    @ModelAttribute("address")
    //  @ModelAttribute("address") 相当于 req.setAttribute("address","海底")
    //  @ModelAttribute 相当于 req.setAttribute("String","海底") 默认用返回值类型作为属性名添加到视图当中
    public String a(){
        return "海底";
    }
    // 属于全局的一个属性
    @ModelAttribute("version")
    public String aa() {
        return SpringVersion.getVersion();
    }
    // 将一个user添加到视图当中 （地址栏参数 http://localhost/a4?user=张三&id=123123）
    @ModelAttribute
    public void aaa(String user,Integer id,Model m) {
        m.addAttribute("user", user);
        m.addAttribute("id", id);
    }


    @GetMapping("a4")
    public String a4(Model m) {
        m.addAttribute("name", "阿斯顿发个话");
        // 文.件[/WEB-INF/templates/a4.jsp] 未找到
        // return "a4";
        System.out.println(m.asMap());
        return "a3";
    }











}
